package day17.myxml01;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Xiao
 * @date 2021/8/11
 */
public class XMLDemo01 {
    /**
     * 利用DOM4J解析xml文件
     * 需求：解析xml文件，将解析到的数据封装到学生对象中，
     *      并将学生对象存储到ArrayList集合中，遍历集合。
     */
    public static void main(String[] args) throws DocumentException {
        //获取一个解析器对象
        SAXReader saxReader = new SAXReader();
        //把xml文件加载到内存中
        Document document = saxReader.read(new File(
                "videoPractice\\src\\day17\\myxml01\\student.xml"));
        //获取根标签
        Element rootElement = document.getRootElement();
        //获取student标签
        //elements():获取调用者的所有子标签，放入集合中返回
        //elements("标签名"):获取调用者的所有指定子标签，放入集合中返回
        List<Element> stuElements = rootElement.elements("student");
        //创建一个ArrayList集合，用于存储学生对象
        ArrayList<Student> list = new ArrayList<>();
        //遍历标签集合，得到每一个student标签
        for (Element stuElement : stuElements) {
            //attribute("属性名"):获取调用者的指定属性，即获取指定attribute对象
            Attribute idAttribute = stuElement.attribute("id");
            //getValue():获取调用者的属性值
            String id = idAttribute.getValue();
            //element("标签名"):获取调用者的指定子标签，即指定element对象
            Element nameElement = stuElement.element("name");
            Element ageElement = stuElement.element("age");
            //获取标签的标签体内容
            String name = nameElement.getText();
            String age = ageElement.getText();
            //将解析到的数据封装为学生对象
            Student stu = new Student(id, name, Integer.parseInt(age));
            //将学生对象保存到ArrayList集合中
            list.add(stu);
        }
        //遍历ArrayList集合
        for (Student stu : list) {
            System.out.println(stu);
        }
    }
}
